﻿Imports System.Net
Imports SistemaINCA.Models

Namespace SistemaINCA
    Public Class OPAjaxController
        Inherits System.Web.Mvc.Controller

#Region "OPERACIONES DE LA VISTA PARCIAL '_ViewPeriodoActivo'"
        ''' <summary>
        ''' Operación que ejecuta el comando de desactivación del periodo escolar activo en el sistema.
        ''' Esta operación manda a ejecutar el Procedimiento Almacenado “OP_CLOSE_PERIODO_ACTIVO” que se encuentra en la base de datos
        ''' </summary>
        ''' <returns>Retorna un objeto JsonResult con los datos si la operación se efectuó correctamente o no.</returns>
        ''' <remarks></remarks>
        <Authorize(Roles:="ERA")> _
        <HttpPost()> _
        Function OP_DesactivarPeriodoActivo() As JsonResult
            Dim msjError As String = String.Empty
            Dim db As New SchoolClickDB_Repositorio

            'Ejecutamos la operacion de cierre y verificamos si se ejecuto correctamente o no
            If db.IPeriodos.Operacion_CerrarPeriodoActivo(msjError) Then
                Return Json(New With {.Success = True, .Mensaje = "El periodo de evaluación se cerro correctamente."})
            Else
                Return Json(New With {.Success = False, .Mensaje = msjError})
            End If
        End Function

        ''' <summary>
        ''' Operacion que ejecuta el comando para activar un nuevo periodo en el sistema.
        ''' Esta operacion ejecuta el procedimiento Almacenado "OP_OPEN_PERIODO" que se encuentra en la base de datos
        ''' </summary>
        ''' <returns>Retorna un objeto JsonResult con los datos si la operación se efectuó correctamente o no.</returns>
        ''' <remarks></remarks>
        <Authorize(Roles:="ERA")> _
        <HttpPost()> _
        Function OP_ActivarNuevoPeriodo(FCierre As Date) As JsonResult
            Dim msjError As String = String.Empty
            Dim db As New SchoolClickDB_Repositorio

            'Ejecutamos la operacion de apertura y verificamos si se ejecuto correctamente
            If db.IPeriodos.Operacion_AbrirNuevoPeriodo(FCierre, msjError) Then
                Return Json(New With {.Success = True, .Mensaje = "El periodo de evaluación se aperturó correctamente."})
            Else
                Return Json(New With {.Success = False, .Mensaje = msjError})
            End If
        End Function

        ''' <summary>
        ''' Operacion que ejecuta el comando para cerrar el año escolar activo.
        ''' Ejecuta el procedimiento Almacenado "OP_CLOSE_ANIOESCOLAR_ACTIVO" que se encuentra en la base de datos
        ''' </summary>
        ''' <returns>Retorna un objeto JsonResult con los datos si la operación se efectuó correctamente o no.</returns>
        ''' <remarks></remarks>
        <Authorize(Roles:="ERA")> _
        <HttpPost()> _
        Function OP_CerrarAñoEscolar() As JsonResult
            Dim msjError As String = String.Empty
            Dim db As New SchoolClickDB_Repositorio

            'Ejecutamos la operacion de apertura y verificamos si se ejecuto correctamente
            If db.IAñosEscolares.OperacionCerrarAñoEscolar(msjError) Then
                Return Json(New With {.Success = True, .Mensaje = "El año escolar se cerró correctamente"})
            Else
                Return Json(New With {.Success = False, .Mensaje = msjError})
            End If
        End Function

        ''' <summary>
        ''' Operacion que ejecuta el comando para cerrar el periodo de reposicion de materias del instituto
        ''' Ejecuta el procedimiento Almacenado "OP_CLOSE_PERIODO_SUFICIENCIA" que se encuentra en la base de datos
        ''' </summary>
        ''' <returns></returns>
        ''' <remarks></remarks>
        <Authorize(Roles:="ERA")> _
        <HttpPost()> _
        Function OP_CerrarPeriodoSufi() As JsonResult
            Dim msjError As String = String.Empty
            Dim db As New SchoolClickDB_Repositorio

            'Ejecutamos la operacion de apertura y verificamos si se ejecuto correctamente
            If db.IAñosEscolares.OperacionCerrarPeriodoSuficiencia(msjError) Then
                Return Json(New With {.Success = True, .Mensaje = "El periodo de reposición de materias se cerró correctamente"})
            Else
                Return Json(New With {.Success = False, .Mensaje = msjError})
            End If
        End Function
#End Region

        <AllowAnonymous()> _
        <HttpPost()> _
        Function OP_GetAllMunicipios() As JsonResult
            Dim db As New SchoolClickDB_Repositorio
            Try
                Dim var = db.IDepartamentos.GetAllArraryMunicipios
                Return Json(New With {.Success = True, .Registros = var}, JsonRequestBehavior.AllowGet)
            Catch ex As Exception
                Response.StatusCode = HttpStatusCode.InternalServerError
                Return Json(ex.Message, JsonRequestBehavior.AllowGet)
            End Try
        End Function

        <AllowAnonymous()> _
        <HttpPost()> _
        Function OP_GetAllPaises() As JsonResult
            Dim db As New SchoolClickDB_Repositorio
            Try
                Dim var = db.IDepartamentos.GetAllPaises
                Return Json(New With {.Success = True, .Registros = var}, JsonRequestBehavior.AllowGet)
            Catch ex As Exception
                Response.StatusCode = HttpStatusCode.InternalServerError
                Return Json(ex.Message, JsonRequestBehavior.AllowGet)
            End Try
        End Function

        <AllowAnonymous()> _
        <HttpPost()> _
        Function OP_GetAllCEducativos() As JsonResult
            Dim db As New SchoolClickDB_Repositorio
            Try
                Dim var = db.IDepartamentos.GetAllCentrosEscolares
                Return Json(New With {.Success = True, .Registros = var}, JsonRequestBehavior.AllowGet)
            Catch ex As Exception
                Response.StatusCode = HttpStatusCode.InternalServerError
                Return Json(ex.Message, JsonRequestBehavior.AllowGet)
            End Try
        End Function

        <AllowAnonymous()> _
        <HttpPost()> _
        Function OP_FindPais(text As String) As JsonResult
            Dim db As New SchoolClickDB_Repositorio
            Try
                Dim var = db.IDepartamentos.BuscarPais(text)
                Return Json(New With {.Success = True, .Registros = var})
            Catch ex As Exception
                Return Json(New With {.Success = False, .Mensaje = ex.Message})
            End Try
        End Function

        <AllowAnonymous()> _
        <HttpPost()> _
        Function OP_FindCentroEscolar(text As String) As JsonResult
            Dim db As New SchoolClickDB_Repositorio
            Try
                Dim var = db.IDepartamentos.BuscarCentroEscolar(text)
                Return Json(New With {.Success = True, .Registros = var})
            Catch ex As Exception
                Return Json(New With {.Success = False, .Mensaje = ex.Message})
            End Try
        End Function

        <AllowAnonymous()> _
        <HttpPost()> _
        Function OP_FindDepartamento(text As String) As JsonResult
            Dim db As New SchoolClickDB_Repositorio
            Try
                Dim var = db.IDepartamentos.BuscarDepartamento(text)
                Return Json(New With {.Success = True, .Registros = var})
            Catch ex As Exception
                Return Json(New With {.Success = False, .Mensaje = ex.Message})
            End Try
        End Function

        <AllowAnonymous()> _
        <HttpPost()> _
        Function OP_FindMunicipios(text As String, options As String) As JsonResult
            Dim db As New SchoolClickDB_Repositorio
            Try
                Dim var = db.IDepartamentos.BuscarMunicipio(options, text)
                Return Json(New With {.Success = True, .Registros = var})
            Catch ex As Exception
                Return Json(New With {.Success = False, .Mensaje = ex.Message})
            End Try
        End Function

        <Authorize(Roles:="ERA")> _
        <HttpPost()> _
        Function OP_FindAlumno(text As String) As JsonResult
            Dim db As New SchoolClickDB_Repositorio
            Try
                Dim var = db.IAlumnos.BuscarAlumnoByNombreOApellido(text)
                Return Json(New With {.Success = True, .Registros = var})
            Catch ex As Exception
                Return Json(New With {.Success = False, .Mensaje = ex.Message})
            End Try
        End Function

        <Authorize(Roles:="ERA")> _
        <HttpPost()> _
        Function UPT_SaveDatosPersonalesAlumno(NIE As String, DptoID As Integer, MunID As Integer, DUI As String, Telefono As String, Dir As String, Departamento As String, Municipio As String, Celular As String, CorreoE As String, MFamilia As String, EPadece As String, MPermanente As String, Trabaja As Integer, THijos As Integer) As JsonResult
            Dim db As New SchoolClickDB_Repositorio
            'Comprobamos si los datos que se nos han enviado son validos
            If String.IsNullOrWhiteSpace(Dir) Then Return Json(New With {.Success = False, .Mensaje = My.Resources.ErrorMessageResources.Controller_Error_Direccion})
            If Not Regex.IsMatch(Telefono, "^(2|7)\d{3}\-\d{4}$") Then Return Json(New With {.Success = False, .Mensaje = My.Resources.ErrorMessageResources.Controller_Error_Telefono})
            'Si los datos son validos intentaremos guardar los cambios en la base de datos
            Try
                Dim bTHijos As Boolean = IIf(THijos = 1, True, False)
                Dim bTrabaja As Boolean = IIf(Trabaja = 1, True, False)
                db.IAlumnos.UpdateDatosPersonales(NIE, DUI, Dir, DptoID, MunID, Telefono, Celular, CorreoE, MFamilia, bTrabaja, bTHijos, EPadece, MPermanente)
                Return Json(New With {.Success = True})
            Catch ex As Exception
                Return Json(New With {.Success = False, .Mensaje = ex.Message})
            End Try
        End Function

        <Authorize(Roles:="ERA")> _
        <HttpPost()> _
        Function OP_DesactivarAlumno(NIE As String) As JsonResult
            Dim db As New SchoolClickDB_Repositorio
            Try
                If db.IAlumnos.DesactivarAlumno(NIE) Then
                    Return Json(New With {.Success = True})
                Else
                    Return Json(New With {.Success = False, .Mensaje = "Lo sentimos, pero no se ha podido eliminar al usuario del sistema"})
                End If
            Catch ex As Exception
                Return Json(New With {.Success = False, .Mensaje = ex.Message})
            End Try
        End Function

        <Authorize(Roles:="ERA")> _
        <HttpPost()> _
        Function UPT_DatosResponsable(IDR As Integer, DUI As String, Profesion As String, Telefono As String, LTrabajo As String, Dir As String, Correo As String) As JsonResult
            Dim db As New SchoolClickDB_Repositorio
            If Not Regex.IsMatch(Telefono, "^(2|7)\d{3}\-\d{4}$") Then Return Json(New With {.Success = False, .Mensaje = My.Resources.ErrorMessageResources.Controller_Error_Telefono})
            Try
                If db.IResponsables.UpdateResponsable(IDR, DUI, Profesion, LTrabajo, Dir, Telefono, Correo) Then
                    Return Json(New With {.Success = True})
                Else
                    Return Json(New With {.Success = False, .Mensaje = "Lo sentimos, pero ocurrio un error al intentar actualizar los datos del responsable"})
                End If
            Catch ex As Exception
                Return Json(New With {.Success = False, .Mensaje = ex.Message})
            End Try
        End Function

        <Authorize(Roles:="ERA")> _
        <HttpPost()> _
        Function DEL_ResponsableAlumno(IDR As Integer, NIE As String) As JsonResult
            Dim db As New SchoolClickDB_Repositorio
            Dim strEncryp = HttpUtility.HtmlEncode(NIE)
            Try
                If db.IResponsables.DeleteResponsable(IDR, NIE) Then
                    Return Json(New With {.Success = True})
                Else
                    Return Json(New With {.Success = False, .Mensaje = "Lo sentimos, pero ocurrio un error interno al intentar eliminar al responsable"})
                End If
            Catch ex As Exception
                Return Json(New With {.Success = False, .Mensaje = ex.Message})
            End Try
        End Function
    End Class
End Namespace
